package first_week

import "fmt"

func DeleteSliceV1[T any](idx int, array []T) ([]T, error) {
	//边界范围判断 溢出的话返回提示信息和原数组
	if idx < 0 || idx >= len(array) {
		return array, fmt.Errorf("illegality idx %d length is %d", idx, len(array))
	}
	//在原有内存上进行操作 没有改变底层数组
	for i := idx; i+1 < len(array); i++ {
		array[i] = array[i+1]
	}
	return array[:len(array)-1], nil
}
func DeleteSliceV2[T any](idx int, array []T) ([]T, error) {
	//边界范围判断 溢出的话返回提示信息和原数组
	if idx < 0 || idx >= len(array) {
		return array, fmt.Errorf("illegality idx %d length is %d", idx, len(array))
	}
	//重新开辟一个切片 并初始化容量 节省容量
	resArray := make([]T, 0, len(array)-1)
	for i := 0; i < len(array); i++ {
		if i == idx {
			continue
		}
		resArray = append(resArray, array[i])
	}
	return resArray, nil
}
